`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/08/06 12:57:40
// Design Name: 
// Module Name: forward
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module forward(
    clk,rs1,rs2,rd_exe,rd_mem,opcode_exe,lu,fw_1,fw_2,nop_fw
    );
    input clk;
    input [4:0] rs1,rs2,rd_exe,rd_mem;
    input [6:0] opcode_exe;
    output reg lu,nop_fw;
    output reg [1:0] fw_1,fw_2;

    parameter load = 7'b0000011;

    always @(*) begin
        lu = 0;
        nop_fw = 0;
        if(opcode_exe==load) begin
            if(rs1==rd_exe||rs2==rd_exe) begin
                lu = 1;
                nop_fw = 1;
            end
        end
    end

    always @(posedge clk) begin
        fw_1 = 2'b10;
        fw_2 = 2'b10;
        if(opcode_exe!=load) begin
            case (rs1)
                rd_exe : fw_1 <= 2'b00;
                rd_mem : fw_1 <= 2'b01;
            endcase
            case (rs2)
                rd_exe : fw_2 <= 2'b00;
                rd_mem : fw_2 <= 2'b01;
            endcase
        end
    end
endmodule
